2003-01-05

  * example2/wmradar.cc: Make planes still light up when speed == 0 (oops).
    Other cosmetic changes.

  * wmellipse.cc (draw_border(...)): Fix interpolation.

  * wmwllipse.h: Remove obsolete comment.

  * wmframe.cc: Fix masking when frame isn't transparent.

  * wmframe.h: Add clipping mask data member. Move clip() to wmframe.cc.

  * xwrapper.cc (draw_horizontal_gradient,draw_vertical_gradient):
    Reformat indentation (it was so ugly!).

  * FAQ.txt: Remove notes about ellipse/frame clipping bugs.

  * wmcanvas.cc: Note that copy_buffer() is just a partial reimplementation
    of WMImage::real_display(). So wBuffered is really just a class-wide
    dodisplay setting. As such, replace calls to copy_buffer() with
    display(). Might want to rename some things in light of this, as well as
    remove copy_buffer().

Some other days:

  * example2/{wmradar.cc,wmradar.h,wmairtrafficcontrol.cc}: New example game
    demonstrating the integration of several widgets.

2002-12-28

  * wmclickable.h: New class for clickable widgets.

  * wmwindow.h wmframe.h, wmframe.cc, wmcallback.h: Use WMClickable.

2002-12-21

  * wmapp.cc: WMFrameBorderBright is too dim. Other dockapps look like
    they use 0xC8C[38]C8.

  * xwrapper.h, xwrapper.cc: Give each pixmap its own GC, and set clipping
    mask to dest.mask if it's there. Enables me to remove kludgy use_mask().

  * wmimage.cc, wmapp.cc, wmapp.h, wmcanvas.cc: Remove use_mask().

  * wmimage.h, wmimage.cc: New function seticon(bool) to set a blank
    b_width() by b_height() icon.

  * wmcanvas.h, wmcanvas.cc: New functions draw_arc() and fill_arc().

2002-12-20

  * wmellipse.h, wmellipse.cc: New class WMEllipse, places its contents in
    an ellipse.

  * wmwidget.h: Add contains() function to WMWidget. This enables the
    creation of arbitrarily shaped viewports, in the style of WMEllipse.
  
  * wmapp.h, wmapp.cc: Add use_mask() function, to muck with GC masking.
    Needed so that WMEllipse is humanly possible.
    Whenever drawing to the window, call app()->use_mask(true). When
    drawing on any other pixmap, call use_mask(false). Default setting is
    true. A better solution would be to have one GC for each window, and a
    single GC for everything else.

  * wmimage.cc, wmcanvas.cc: Modify to use use_mask.

  * xwrapper.h, xwrapper.cc: New functions draw_arc() and fill_arc().
  
  * wmwidget.h, various: Put back WMFrame for parent().

  * Widgets.txt: Update.

2002-12-19

  * xwapper.h: Fix header inclusion order problems. Now you can
    #include "xwrapper.h" anywhere you like.

  * wmframe.h, wmframe.cc: Simplify and improve consistency by inheriting
    from WMCallback.

  * wmwindow.h: Only inherit from WMFrame.

  * various: Reorder #include statements to include only necessary files.
    Use WMWidget* instead of WMFrame* for parent().

  * Makefile, example/Makefile: Tweak.

2002-05-08

  * xwrapper.cc:
  "Fixed" X memory leak caused by repetitive calls to XAllocColor. <rant>
  Bizarrly, there doesn't appear to be a way to get the colormap index of an
  RGB color without allocating it. Ideally, you would only allocate each color
  once, but the only apparent way to do this is to keep your own custom
  colormap with reference counts, since X won't tell you the index of a color
  without allocating it. And without reference counts, the only way to keep
  from allocating repeatedly is to deallocate after each allocation. But this
  means that you're using colors which haven't been allocated. Realistically,
  this doesn't matter except in 8 bit mode, where there aren't enough colors
  for the spectrum-style WMMeterBar. In order to display well in 8 bit mode,
  it seems that major color management is necessary, as X is far too stupid to
  do it for us. Maybe I should look at Berlin again. </rant>

2002-05-07

  * wmwidgets.cc, wmwidgets.h, wmapp.h, wmextras.h xwrapper.cc,
    example/wmexample.cc, FAQ.txt:
  Removed all pointer comparisons/assignments to NULL. NULL isn't type-safe,
  and in C++, "if (ptr != NULL)" is the same as "if (ptr)" because "No object
  is allocated with the address 0" (Stroustrup 88).

  * wmapp.cc, wmwidgets.cc:
  Removed more redundant constructor calls.

  * wmwidgets.cc, wmwidgets.h:
  - Slight formatting fix again.
  - Wrote a destructor for WMWindow to deallocate its pixmaps.
  - Made initpixmaps() be called only once for each window. This fixes a
    memory leak in X that occurred when switching windows.

  * wmapp.cc, wmapp.h:
  - Wrote a short destructor to deallocate windows (probably unnecessary).
  - delete[]'d character arrays after XSetClassHint().

  * xwrapper.cc, xwrapper.h:
  Wrote a free_pixmap() function to complement create_pixmap (don't call
  create_pixmap() on an existing pixmap without freeing it first!).

2002-05-06
  
  * xwrapper.cc:
  - Cleaned up get_point() a little.
  - Added simple deallocation in Xwrapper::~Xwrapper ().

  * wmapp.cc:69
  Removed redundant assignment to static Xwrapper object after it was
  already constructed (which caused my previous modification to crash due to
  the destructor being called twice).

  * wmwidgets.txt:
  Added WMSlider to the class hierarchy and removed tabs.

  * wmextras.h:
  Removed redundant calls to base class constructors and members.
  
2002-05-05

  * wmextras.cc:
  Merged slider_click() and slider_scroll() into one, simpler/more readable
  function.

  * wmwidgets.cc:
  Cleaned up my formatting a little.
